package com.arialyy.frame.core;
import android.content.Intent;
import android.databinding.DataBindingUtil;
import android.databinding.ViewDataBinding;
import android.os.Bundle;
import android.os.Handler;
import android.support.annotation.NonNull;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import com.arialyy.frame.module.AbsModule;
import com.arialyy.frame.module.IOCProxy;
import com.arialyy.frame.temp.AbsTempView;
import com.arialyy.frame.temp.OnTempBtClickListener;
import com.arialyy.frame.temp.TempView;
import com.arialyy.frame.util.StringUtil;
import com.arialyy.frame.util.show.T;
import butterknife.ButterKnife;
/**
* Created by lyy on 2015/11/3.
* 所有的 Activity都应该继承这个类
*/
public abstract class AbsActivity<VB extends ViewDataBinding> extends AppCompatActivity implements OnTempBtClickListener {
protected String TAG = "";
private VB mBind;
private IOCProxy mProxy;
/**
* 第一次点击返回的系统时间
*/
private long mFirstClickTime = 0;
protected AbsFrame mAm;
protected View mRootView;
private ModuleFactory mModuleF;
protected AbsTempView mTempView;
protected boolean useTempView = true;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
initialization();
init(savedInstanceState);
}
private void initialization() {
mAm = AbsFrame.getInstance();
mAm.addActivity(this);
mBind = DataBindingUtil.setContentView(this, setLayoutId());
mProxy = IOCProxy.newInstance(this);
TAG = StringUtil.getClassName(this);
mModuleF = ModuleFactory.newInstance();
ButterKnife.inject(this);
mRootView = mBind.getRoot();
if (useTempView) {
mTempView = new TempView(this);
mTempView.setBtListener(this);
}
}
/**
* 获取填充View
*/
protected AbsTempView getTempView() {
return mTempView;
}
/**
* 是否使用填充界面
*
* @param useTempView
*/
protected void setUseTempView(boolean useTempView) {
this.useTempView = useTempView;
}
/**
* 设置自定义的TempView
*
* @param tempView
*/
protected void setCustomTempView(AbsTempView tempView) {
mTempView = tempView;
mTempView.setBtListener(this);
}
/**
* 显示占位布局
*
* @param type {@link TempView#ERROR}
* {@link TempView#DATA_NULL}
* {@link TempView#LOADING}
*/
protected void showTempView(int type) {
if (mTempView == null || !useTempView) {
return;
}
mTempView.setVisibility(View.VISIBLE);
mTempView.setType(type);
setContentView(mTempView);
}
public ModuleFactory getModuleFactory() {
return mModuleF;
}
/**
* 关闭占位布局
*/
protected void hintTempView() {
hintTempView(0);
}
/**
* 延时关闭占位布局
*/
protected void hintTempView(int delay) {
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
if (mTempView == null || !useTempView) {
return;
}
mTempView.clearFocus();
mTempView.setVisibility(View.GONE);
setContentView(mRootView);
}
}, delay);
}
@Override
public void onBtTempClick(View view, int type) {
}
@Override
protected void onDestroy() {
super.onDestroy();
}
protected void init(Bundle savedInstanceState) {
}
@Override
public void finish() {
super.finish();
mAm.removeActivity(this);
}
public View getRootView() {
return mRootView;
}
/**
* 设置资源布局
*
* @return
*/
protected abstract int setLayoutId();
/**
* 获取binding对象
*/
protected VB getBinding() {
return mBind;
}
/**
* 获取Module
*
* @param clazz {@link AbsModule}
*/
protected <M extends AbsModule> M getModule(@NonNull Class<M> clazz) {
M module = mModuleF.getModule(this, clazz);
mProxy.changeModule(module);
return module;
}
/**
* 获取Module
*
* @param clazz Module class0
* @param callback Module回调函数
* @param <M> {@link AbsModule}
* @return
*/
protected <M extends AbsModule> M getModule(@NonNull Class<M> clazz, @NonNull AbsModule.OnCallback callback) {
M module = mModuleF.getModule(this, clazz);
module.setCallback(callback);
mProxy.changeModule(module);
return module;
}
/**
* 数据回调
*
* @param result
* @param data
*/
protected abstract void dataCallback(int result, Object data);
/**
* 双击退出
*/
private boolean onDoubleClickExit(long timeSpace) {
long currentTimeMillis = System.currentTimeMillis();
if (currentTimeMillis - mFirstClickTime > timeSpace) {
T.showShort(this, "再按一次退出");
mFirstClickTime = currentTimeMillis;
return false;
} else {
return true;
}
}
/**
* 双击退出,间隔时间为2000ms
*
* @return
*/
public boolean onDoubleClickExit() {
return onDoubleClickExit(2000);
}
/**
* 退出应用程序
*
* @param isBackground 是否开开启后台运行,如果为true则为后台运行
*/
public void exitApp(Boolean isBackground) {
mAm.exitApp(isBackground);
}
/**
* 退出应用程序
*/
public void exitApp() {
mAm.exitApp(false);
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
PermissionHelp.getInstance().handlePermissionCallback(requestCode, permissions, grantResults);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
PermissionHelp.getInstance().handleSpecialPermissionCallback(this, requestCode, resultCode, data);
}
}